﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Clases;

namespace Datos
{
    public class datEmpresa
    {
        public List<clsEmpresa> Consultar_Empresa_X_Usuario(Decimal cod_usuario)
        {
            try
            {
                var lst = new List<clsEmpresa>();
                General_Entities enti = new General_Entities();
                var con = enti.Consultar_Empresa_X_Usuario(Convert.ToDecimal(cod_usuario));
                foreach (var item in con)
                {
                    clsEmpresa empresa = new clsEmpresa();
                    empresa.CodigoEmpresa = Convert.ToDecimal(item.codigo);
                    empresa.NombreEmpresa = Convert.ToString(item.nombre);
                    empresa.Contacto = Convert.ToString(item.contacto);
                    if (Convert.ToString(item.estado) == "Activo")
                        empresa.Estado = 0;
                    else
                        empresa.Estado = 1;
                    empresa.Descripcion = Convert.ToString(item.descripcion);
                    empresa.Observacion = Convert.ToString(item.observacion);
                    lst.Add(empresa);
                }
                return lst;
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                Console.WriteLine("Error datEmpresa: " + ex);
                return null;
            }
        }

        public clsEmpresa ConsultarEmpresa(int id_empresa)
        {
            try
            {
                clsTelefono tel = new clsTelefono();
                clsTelefono Fax1 = new clsTelefono();
                clsEmpresa emp_c = new clsEmpresa();
                clsTelefono Telefono2 = new clsTelefono();
                clsTelefono Movil = new clsTelefono();
                clsCorreo Correo = new clsCorreo();
                clsUbicacion Ubicacion = new clsUbicacion();
                clsUbicacion Ubicacion2 = new clsUbicacion();

                General_Entities enti = new General_Entities();

                //var item = (from q in enti.Empresa where q.codigo == id_empresa select q).First();
                //var telefono = (from q in enti.Telefono where q.empresa == item.codigo select q).ToList();
                //var Ubic = (from q in enti.Telefono where q.empresa == item.codigo select q).ToList();
                var con = enti.Consultar_Empresa_pa(id_empresa);
                //foreach (var item in con)
                //{
                //emp_c.CodigoEmpresa = Convert.ToDecimal(item.codigo);
                //emp_c.NombreEmpresa = Convert.ToString(item.nombre);
                //    emp_c.Contacto = Convert.ToString(item.contacto);
                //    tel.numero = Convert.ToString(telefono.Where(q => q.tipoTelefono == 1).Take(1).First().numero);
                //    emp_c.Telefono = tel;
                //    Fax1.numero = Convert.ToString(telefono.Where(q => q.tipoTelefono == 2).First().numero);
                //    emp_c.Fax = Fax1;
                //    Telefono2.numero = Convert.ToString(telefono.Where(q => q.tipoTelefono == 1).Take(2).First().numero);
                //    emp_c.Telefono2 = Telefono2;
                //    Movil.numero = Convert.ToString(telefono.Where(q => q.tipoTelefono == 3).First().numero);
                //    emp_c.Movil = Movil;
                //    Correo.descripcion = Convert.ToString((from q in enti.Correo where q.empresa == item.codigo select q.descripcion).First());
                //    emp_c.Correo = Correo;
                //    Ubicacion.Direccion = Convert.ToString(item.direccion1);
                //    emp_c.Ubicacion = Ubicacion;
                //    Ubicacion2.Direccion = Convert.ToString(item.direccion2);
                //    emp_c.Ubicacion2 = Ubicacion2;
                //    emp_c.Descripcion = Convert.ToString(item.descripcion);
                //    emp_c.Observacion = Convert.ToString(item.observacion);
                //}
                var ub = (from q in enti.Ubicacion where q.empresa == id_empresa select q).First();
                foreach (var item in con)
                {
                    emp_c.CodigoEmpresa = Convert.ToDecimal(id_empresa);
                    emp_c.NombreEmpresa = Convert.ToString(item.nombre);
                    emp_c.Contacto = Convert.ToString(item.contacto);
                    tel.numero = Convert.ToString(item.telefono1);
                    emp_c.Telefono = tel;
                    Fax1.numero = Convert.ToString(item.fax);
                    emp_c.Fax = Fax1;
                    Telefono2.numero = Convert.ToString(item.telefono2);
                    emp_c.Telefono2 = Telefono2;
                    Movil.numero = Convert.ToString(item.movil);
                    emp_c.Movil = Movil;
                    Correo.descripcion = Convert.ToString(item.correo);
                    emp_c.Correo = Correo;
                    Ubicacion.Direccion = Convert.ToString(item.direccion1);
                    Ubicacion.Pais = ub.pais;
                    Ubicacion.Ciudad = ub.ciudad;
                    emp_c.Ubicacion = Ubicacion;
                    Ubicacion2.Direccion = Convert.ToString(item.direccion2);
                    Ubicacion2.Pais = ub.pais;
                    Ubicacion2.Ciudad = ub.ciudad;
                    emp_c.Ubicacion2 = Ubicacion2;
                    emp_c.Descripcion = Convert.ToString(item.descripcion);
                    emp_c.Observacion = Convert.ToString(item.observacion);

                }
                return emp_c;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error al Consultar la empresa en la capa de Datos: " + ex);
                return null;
            }
        }

        public List<clsEmpresa> Grabar_Empresa_X_Usuario(Decimal cod_usuario)
        {
            try
            {
                var lst = new List<clsEmpresa>();
                General_Entities enti = new General_Entities();
                var con = enti.Consultar_Empresa_X_Usuario(Convert.ToDecimal(cod_usuario));
                foreach (var item in con)
                {
                    clsEmpresa empresa = new clsEmpresa();
                    empresa.CodigoEmpresa = Convert.ToDecimal(item.codigo);
                    empresa.NombreEmpresa = Convert.ToString(item.nombre);
                    empresa.Contacto = Convert.ToString(item.contacto);
                    if (Convert.ToString(item.estado) == "Activo")
                        empresa.Estado = 0;
                    else
                        empresa.Estado = 1;
                    empresa.Descripcion = Convert.ToString(item.descripcion);
                    empresa.Observacion = Convert.ToString(item.observacion);
                    lst.Add(empresa);
                }
                return lst;
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                Console.WriteLine("Error datEmpresa: " + ex);
                return null;
            }
        }

        public bool Modificar_Empresa_Mantenimiento(clsEmpresa e)
        {
            try
            {
                using (General_Entities ent = new General_Entities())
                {
                    //busca por PK el primero que encuentre lo coge
                    var x = (from a in ent.Empresa where a.codigo == e.CodigoEmpresa select a).First();
                    x.nombre = e.NombreEmpresa;
                    x.contacto = e.Contacto;
                    x.usuario = e.Usuario;
                    x.observacion = e.Observacion;
                    x.descripcion = e.Descripcion;
                    //x.Correo = e.Correo.codigo;
                    //x.Telefono = e.Telefono.Codigo;
                    x.estado  = 1;
                    ent.SaveChanges();
                }
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex);
                return false;
            }

        }

        public bool Modificar_Empresa_Telefono(clsTelefono t, clsEmpresa e)
        {
            try
            {
                using (General_Entities ent1 = new General_Entities())
                {
                    var x1 = (from a1 in ent1.Telefono where a1.empresa == e.CodigoEmpresa && a1.tipoTelefono==t.Tipo  select a1);
                    if (x1.Count() == 0)
                    {
                        if (t.Tipo == 1)
                        {
                            Grabar_Telefono(t);
                        }
                        if (t.Tipo == 2)
                        {
                            Grabar_Fax(t);
                        }
                        if (t.Tipo == 1)
                        {
                            Grabar_Movil(t);
                        }
                    }
                    else
                    {
                       
                        var x2 = x1.First();
                        x2.codigo = t.Codigo;
                        x2.numero = t.numero;
                        x2.estado = 1;
                        ent1.SaveChanges();
                    }
                        
                }
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex);
                return false;
            }
        }

        public bool Modificar_Empresa_fax(clsTelefono t, clsEmpresa e)
        {
            try
            {
                using (General_Entities ent2 = new General_Entities())
                {
                    var x2 = (from a2 in ent2.Telefono where a2.empresa == e.CodigoEmpresa select a2).First();
                    x2.codigo = t.Codigo;
                    x2.numero = t.numero;
                    x2.estado = 1;
                    ent2.SaveChanges();
                }
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex);
                return false;
            }

        }

        public bool Modificar_Empresa_Movil(clsTelefono t, clsEmpresa e)
        {
            try
            {
                using (General_Entities ent3 = new General_Entities())
                {
                    var x3 = (from a3 in ent3.Telefono where a3.empresa == e.CodigoEmpresa select a3).First();
                    x3.codigo = t.Codigo;
                    x3.numero = t.numero;
                    x3.estado = 1;
                    ent3.SaveChanges();
                }
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex);
                return false;
            }

        }


        public bool Grabar_Empresa_Mantenimiento(clsEmpresa emp,ref string IDEMPRESA)
        {
            try
            {

                emp.Estado = 1;
                decimal numero = getIdSiguienteTelefono();
                emp.Telefono.Codigo = numero;
                emp.Telefono2.Codigo = numero + 1;
                emp.Movil.Codigo = numero + 2;
                emp.Fax.Codigo = numero + 3;
                emp.Ubicacion.codigo = getIdSiguienteUbicacion();
                emp.Ubicacion2.codigo= getIdSiguienteUbicacion() + 1;
                emp.Correo.codigo = getIdSiguienteCorreo();

                General_Entities enti = new General_Entities();
                //            (@usuario decimal(10,0), @nombre varchar (30), @contacto varchar(30), @descripcion varchar (200), @observacion varchar (200), @estado numeric(4), @codTel numeric(10,0), @numeroTel varchar(20), @codFax numeric (10,0), @numeroFax varchar(20), @codMail numeric (10,0), @correo varchar(30), @codUbicacion numeric (10,0), @pais varchar(3), @ciudad numeric(5), @direccion varchar(255) )
                //IDEMPRESA=
                    enti.Guardar_Empresa(emp.Usuario, emp.NombreEmpresa, emp.Contacto, emp.Descripcion, emp.Observacion, emp.Estado, 
                                    emp.Telefono.Codigo, emp.Telefono.numero,
                                    emp.Telefono2.Codigo, emp.Telefono2.numero,
                                    emp.Movil.Codigo, emp.Movil.numero,
                                    emp.Fax.Codigo, emp.Fax.numero, 
                                    emp.Correo.codigo, emp.Correo.descripcion, 
                                    emp.Ubicacion.codigo, emp.Ubicacion.Pais, emp.Ubicacion.Ciudad, emp.Ubicacion.Direccion,
                                    emp.Ubicacion2.codigo, emp.Ubicacion2.Pais, emp.Ubicacion2.Ciudad, emp.Ubicacion2.Direccion);
                return true;
            }

            catch (System.Data.SqlClient.SqlException ex)
            {
                Console.WriteLine("Error datos Empresa: " + ex);
                return false;
            }
        }

        public Decimal getIdSiguienteUbicacion()
        {
            try
            {
                General_Entities ent = new General_Entities();
                var s_u = Convert.ToDecimal(((from a in ent.Ubicacion select a.codigo).Max())) + 1;
                return s_u;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error al obtener el id siguiente: " + e);
                return 1; //en caso de que no exista algun registro
            }
        }

        public Decimal getIdSiguienteTelefono()
        {
            try
            {
                General_Entities ent = new General_Entities();
                var s_t = Convert.ToDecimal(((from a in ent.Telefono select a.codigo).Max())) + 1;
                return s_t;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error al obtener el id siguiente: " + e);
                return 1; //en caso de que no exista algun registro
            }
        }

        public Decimal getIdSiguienteCorreo()
        {
            try
            {
                General_Entities ent = new General_Entities();
                var s_email = Convert.ToDecimal(((from a in ent.Correo select a.codigo).Max())) + 1;
                return s_email;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error al obtener el id siguiente: " + e);
                return 1; //en caso de que no exista algun registro
            }
        }

        public bool Eliminar_Empresa_Logico(clsEmpresa e)
        {
            try
            {
                using (General_Entities ent_d = new General_Entities())
                {
                    var x = (from a in ent_d.Empresa where a.codigo == e.CodigoEmpresa select a).First();
                    x.estado = 2;
                    ent_d.SaveChanges();
                }
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex);
                return false;
            }

        }

        public bool Grabar_Telefono(clsTelefono pho)
        {
            //grabo el telefono y obtengo el id situiente
            try
            {
                Decimal id = getIdSiguienteTelefono();
                pho.Codigo = id;
                pho.Estado = 1;
                pho.Tipo = 1;
                using (General_Entities ent = new General_Entities())
                {
                    Telefono telf = new Telefono()
                    {
                        codigo = pho.Codigo,
                        empresa = pho.Empresa,
                        numero = pho.numero,
                        tipoTelefono = pho.Tipo,
                        estado = pho.Estado
                    };
                    ent.AddToTelefono(telf);
                    ent.SaveChanges();
                }
                return true;
            }

            catch (Exception ex)
            {
                Console.WriteLine("Error datos: " + ex);
                return false;
            }
        }


        public bool Grabar_Fax(clsTelefono fax)
        {
            //mando a grabar el fax 
            //obtengo el id siguiente mas uno para guardar el fax despues del telefono
            try
            {
                Decimal id = getIdSiguienteTelefono();
                fax.Codigo = id + 1;
                fax.Estado = 1;
                fax.Tipo = 2;
                using (General_Entities ent = new General_Entities())
                {
                    Telefono fx = new Telefono()
                    {
                        codigo = fax.Codigo,
                        empresa = fax.Empresa,
                        numero = fax.numero,
                        tipoTelefono = fax.Tipo,
                        estado = fax.Estado
                    };
                    ent.AddToTelefono(fx);
                    ent.SaveChanges();
                }
                return true;
            }

            catch (Exception ex)
            {
                Console.WriteLine("Error datos: " + ex);
                return false;
            }
        }

        public bool Grabar_Movil(clsTelefono pho)
        {
            //grabo el telefono y obtengo el id situiente
            try
            {
                Decimal id = getIdSiguienteTelefono()+2;
                pho.Codigo = id;
                pho.Estado = 1;
                pho.Tipo = 3;
                using (General_Entities ent = new General_Entities())
                {
                    Telefono telf = new Telefono()
                    {
                        codigo = pho.Codigo,
                        empresa = pho.Empresa,
                        numero = pho.numero,
                        tipoTelefono = pho.Tipo,
                        estado = pho.Estado
                    };
                    ent.AddToTelefono(telf);
                    ent.SaveChanges();
                }
                return true;
            }

            catch (Exception ex)
            {
                Console.WriteLine("Error datos: " + ex);
                return false;
            }
        }

        public List<clsProveedor> ConsultarNoProveedor(Decimal p)
        {
            List<clsProveedor> listaEmp = new List<clsProveedor>();
            try
            {
                General_Entities enti = new General_Entities();
                var con = enti.ConsultarNoProveedor(p);
                foreach (var item in con)
                {
                    clsProveedor proveedor = new clsProveedor();
                    proveedor.Codigo = Convert.ToDecimal(item.codigo);
                    proveedor.Nombre = Convert.ToString(item.nombre);
                    proveedor.Telefono = Convert.ToString(item.telefono);
                    proveedor.Correo = Convert.ToString(item.correo);
                    listaEmp.Add(proveedor);

                }
                return listaEmp;
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                Console.WriteLine("Error al Consultar las empresas en la capa de Datos: " + ex);
                return null;
            }

        }

        public bool GuardarProveedor(Decimal empresa, Decimal provee)
        {

            try
            {
                using (General_Entities enti = new General_Entities())
                {
                    ClienteXProveedor cli = new ClienteXProveedor()
                    {
                        cliente = empresa,
                        proveedor = provee,
                        estado = 1
                    };
                    enti.AddToClienteXProveedor(cli);
                    enti.SaveChanges();
                }

                return true;


            }
            catch (Exception ex)
            {
                Console.WriteLine("Error al Insertar el  en la capa de Datos: " + ex);
                return false;
            }

        }

    }
}
